/**
 * @param {string[]} words
 * @return {number}
 */
// var maxProduct = function(words) {
//     let len = words.length
//     let arr = new Array(len).fill().map(() => {
//         return new Array(26).fill(0)
//     })
//     for(let i = 0; i < len; i++) {
//         for(let j = 0; j < words[i].length; j++) {
//             arr[i][words[i].charCodeAt(j) - 97] = 1
//         }
//     }
//     let res = 0
//     for(let i = 0; i < len - 1; i++) {
//         for(let j = i + 1; j < len; j++) {
//             let sum = 0
//             for(let k = 0; k < 26; k++) {
//                 sum += arr[i][k] & arr[j][k]
//             }
//             if(sum === 0) {
//                 if(words[i].length * words[j].length > res) {
//                     res = words[i].length * words[j].length
//                 }
//             }
//         }
//     }
//     return res
// };
var maxProduct = function(words) {
    let len = words.length
    let res = 0
    let bits = new Array(len).fill(0)
    for(let i = 0; i < len; i++) {
        let word = words[i]
        for(let j = 0; j < word.length; j++) {
            // 生成各个元素对应的二进制
            // 这里是重点 这个是将1往左移n位
            bits[i] |= 1 << (word[j].charCodeAt() - 97)
        }
    }
    for(let i = 0; i < len - 1; i++) {
        for(let j = i + 1; j < len; j++) {
            if((bits[i] & bits[j]) === 0) {
                res = Math.max(res, words[i].length * words[j].length)
            }
        }
    }
    return res
}
console.log(maxProduct(["abcw","baz","foo","bar","xtfn","abcdef"]));